﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
//预定义符号
/*
__FILE__ 当前文件路径
__DATE__ 当前编译日期
__TIME__ 当前编译时间
__LINE__ 当前运行行数

*/
//int main()
//{
//	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d--->%s--%s--%s--%d\n", arr[i], __FILE__, __DATE__, __TIME__, __LINE__);
//	}
//	printf("%d\n", __STDC__);
//
//}

////#define
//#define MAX 1000
//#define reg register          //为 register这个关键字，创建一个简短的名字
//#define do_forever for(;;)     //用更形象的符号来替换死循环
//#define CASE break;case        //在写case语句的时候自动把 break写上。
//// 如果定义的 stuff过长，可以分成几行写，除了最后一行外，每行的后面都加一个反斜杠(续行符)。
//#define DEBUG_PRINT printf("file:%s\tline:%d\t \
//                          date:%s\ttime:%s\n" ,\
//                          __FILE__,__LINE__ ,   \
//                          __DATE__,__TIME__ )  

//#define定义宏
//#define SQART(num) num * num
//int main()
//{
//	int a = SQART(2 + 1);
//	printf("%d\n", a);
//	return 0;
//}

//#操作符
////#在宏中有特定的作用-->将参数转换为字符串
//#define Print(a)  printf("The " #a " is printed!\n")
//int main()
//{
//	//printf("hello " "world!\n");
//	Print(example);
//}

////##操作符-->可以在宏体内进行拼接操作
//#define ClassC 100
//#define CAT(a, b) a##b
//int main()
//{
//	printf("%d\n", CAT(Class, C));
//
//}

////带副作用的宏参数
//#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
//int main()
//{
//	int x = 5;
//	int y = 8;
//	int z = MAX(x++, y++);
//	printf("x=%d y=%d z=%d\n", x, y, z);//输出的结果是什么？
//}

////宏和函数
//#define MAX(a, b) a > b ? a : b
//int Max(int a, int b)
//{
//	return a > b ? a : b;
//}
//int main()
//{
//	int a = 2;
//	int b = 3;
//	int c = MAX(a, b);
//	int d = Max(a, b);
//	printf("%d\n", c);
//	printf("%d\n", b);
//}

//#undef
//#define MAX 10
//#undef MAX
//#define MAX 5
//int main()
//{
//	printf("%d\n", MAX);
//}

//enum
//{
//	MALE,
//	FEMALE
//};
//#if FEMALE
//int main()
//{
//	printf("hehe\n");
//}
//#else
//int main()
//{
//	printf("haha\n");
//}
//#endif

//#include <stdio.h>
//#define __DEBUG__
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//
//#ifdef __DEBUG__
//		printf("%d\n", arr[i]);//为了观察数组是否赋值成功。
//#endif //__DEBUG__
//	}
//	return 0;
//}
//头文件包含
// //全局变量的值
// int g_val = 1;
// #define FLAG 0
// #if g_val
// int main()
// {
//     printf("FLAG!=0\n");
//     return 0;
// }
// #else
// int main()
// {
//     printf("FLAG==0\n");
//     return 0;
// }
// #endif

// //枚举常量在编译阶段的值都是0
// enum
// {
// 	MALE,
// 	FEMALE
// };
// #if FEMALE
// int main()
// {
// 	printf("hehe\n");
// }
// #else
// int main()
// {
// 	printf("haha\n");
// }
// #endif

// #define FALG 3
// #if FLAG==1
// int main()
// {
//     printf("FLAG==1\n");
//     return 0;
// }
// #elif FLAG==2
// int main()
// {
//     printf("FALG==2\n");
//     return 0;
// }
// #else
// int main()
// {
//     printf("FALG==3\n");
//     return 0;
// }
// #endif
// #define FLAG 2
// #if FLAG > 0
//     #if FLAG == 1
//     int main()
//     {
//         printf("FLAG==1\n");
//         return 0;
//     }
//     #else
//     int main()
//     {
//         printf("FLAG>0 && FLAG !=1\n");
//         return 0;
//     }
//     #endif
// #else
// int main()
// {
//     printf("FLAG < 0\n");
//     return 0;
// }
// #endif

// //头文件的嵌套包含
// #include "add1.h"
// #include "add2.h"
// int main()
// {
//     printf("haha\n");
//     return 0;
// }

////#error
//#ifdef FLAG1
//int main()
//{
//	printf("hehe\n");
//}
//#elif defined FLAG2
//int main()
//{
//	printf("haha\n");
//}
//#else
//	#error NO FLAG!
//#endif
//
//

////#line
//#line 10 "example.c"
//int main()
//{
//	printf("line->%d\n", __LINE__);
//	printf("filename->%s", __FILE__);
//}

